package com.example.guli.service.edu.controller.admin;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.guli.common.base.result.R;
import com.example.guli.service.edu.entity.vo.CourseVo;
import com.example.guli.service.edu.entity.Course;
import com.example.guli.service.edu.entity.form.CourseInfoForm;
import com.example.guli.service.edu.entity.vo.CoursePublishVo;
import com.example.guli.service.edu.entity.vo.CourseQueryVo;
import com.example.guli.service.edu.service.CourseService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 课程 前端控制器
 * </p>
 */

@Api(description = "03课程管理")
@CrossOrigin//允许跨域
@RestController
@RequestMapping("/admin/edu/course")
public class CourseController {
    @Autowired
    private CourseService courseService;

    @ApiOperation("所有课程列表")
    @GetMapping("list")
    public R selectList(){
        List<Course> list = courseService.list();
        return R.ok().data("data",list).message("获取课程列表成功");
    }

//    数据库分表，操作数据库分表
    @ApiOperation("新增课程")
    @PostMapping("save-course-info")
    public R saveCourseInfo(
            @ApiParam(value = "课程基本信息",required = true)
            @RequestBody CourseInfoForm courseInfoForm
            ){
            String courseId = courseService.saveCourseInfo(courseInfoForm);
            return  R.ok().data("data",courseId).message("保存成功");
    }

    @ApiOperation("更新课程")
    @PutMapping("update-course-info")
    public R updateCourseInfoById(
            @ApiParam(value = "课程基本信息", required = true)
            @RequestBody CourseInfoForm courseInfoForm){

        courseService.updateCourseInfoById(courseInfoForm);
        return R.ok().message("修改成功");
    }

    @ApiOperation("根据ID查询课程")
    @GetMapping("course-info/{id}")
    public R getById(
            @ApiParam(value = "课程ID", required = true)
            @PathVariable String id){

        CourseInfoForm courseInfoForm = courseService.getCourseInfoById(id);
        if (courseInfoForm != null) {
            return R.ok().data("data", courseInfoForm);
        } else {
            return R.error().message("数据不存在");
        }
    }
    //多表和跨服务删除
    @ApiOperation("根据ID删除课程")
    @DeleteMapping("remove/{id}")
    public R removeById(
            @ApiParam(value = "课程id",required = true)
            @PathVariable String id
            ){
        //TODO: 删除课程视频
        //此处调用vod中的删除视频文件的接口


//        删除课程封面
        boolean b1 = courseService.removeCoverById(id);


//        删除课程
        boolean b = courseService.removeCourseById(id);
        if(b){
            return R.ok().message("删除成功");
        }else {
            return R.error().message("数据不存在");
        }
    }

    @ApiOperation("根据ID获取课程发布信息")
    @GetMapping("course-publish/{id}")
    public R getCoursePublishVoById(
            @ApiParam(value = "课程id",required = true)
            @PathVariable String id){
       CoursePublishVo coursePublishVo=courseService.getCoursePublishVoById(id);
       if(coursePublishVo!=null){
           return R.ok().data("data",coursePublishVo);
       }else {
           return R.error().message("数据不存在");
       }
    }
    @ApiOperation("根据id发布课程")
    @PutMapping("publish-course/{id}")
    public R publishCourseById(
            @ApiParam(value = "课程ID", required = true)
            @PathVariable String id){
        boolean result = courseService.publishCourseById(id);
        if (result) {
            return R.ok().message("发布成功");
        } else {
            return R.error().message("数据不存在");
        }
    }

    //多表联查
    @ApiOperation("课程分页列表")
    @GetMapping("list/{page}/{limit}")
    public R index(
            @ApiParam(value = "当前页码", required = true)
            @PathVariable Long page,

            @ApiParam(value = "每页记录数", required = true)
            @PathVariable Long limit,

            @ApiParam(value = "查询对象")
                    CourseQueryVo courseQueryVo){

        //CourseVo返回的实体，courseQueryVo查询的对象
        IPage<CourseVo> pageModel = courseService.selectPage(page, limit, courseQueryVo);
        List<CourseVo> records = pageModel.getRecords();
        long total = pageModel.getTotal();
        return  R.ok().data("total", total).data("rows", records);

    }

}
